package com.optimus.db.dao.impl;

import com.optimus.common.cvo.ElementoPublicitarioCVO;
import com.optimus.common.cvo.ElementoPublicitarioCVOList;
import com.optimus.common.cvo.ElementoPublicitarioVOList;
import com.optimus.common.cvo.ElementoPublicitarioViewVOList;
import com.optimus.common.util.ApplicationException;
import com.optimus.common.vo.ElementoPublicitarioVO;
import com.optimus.common.vo.view.ElementoPublicitarioViewVO;
import com.optimus.db.QueryFactory;
import com.optimus.db.dao.ElementoPublicitarioDAO;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author victor
 */
public class ElementoPublicitarioDAOImpl extends BaseDAO implements ElementoPublicitarioDAO {

    private static  Logger logger = LoggerFactory.getLogger(ElementoPublicitarioDAOImpl.class);
    public ElementoPublicitarioDAOImpl(){
        super();
    }
    public ElementoPublicitarioVOList listar(ElementoPublicitarioVO clusterPruebaVO) throws ApplicationException {
        Object[] logParams = new Object[2];
        ElementoPublicitarioVOList result = new ElementoPublicitarioVOList();
        result.setLista( new ArrayList<ElementoPublicitarioVO>() );
        result.setTicket(clusterPruebaVO.getTicket());
        Long tk = result.getTicket();
        ElementoPublicitarioVO item = null;
        try {
            String queryStr=QueryFactory.instance().query("elementopublicitario_listar", clusterPruebaVO.getTicket());
            logParams[0] = queryStr;
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            Object objList = query.list();
            Object[] itemObj = null;

            for (Object obj : (List) objList) {
                itemObj = (Object[]) obj;
                item = new ElementoPublicitarioVO();
                item.setIdElementoPublicitario(getInteger(itemObj[0], null, tk));
                item.setNombre(getString(itemObj[2], null, tk));
                item.setIdMercado(getInteger(itemObj[3], null, tk));
                item.setDireccion(getString(itemObj[4], null, tk));
                item.setLatitud(getBigDecimal(itemObj[5], null, tk));
                item.setLongitud(getBigDecimal(itemObj[6], null, tk));
                item.setEstadoRegistro(getString(itemObj[7], null, tk));
                item.setT(getString(itemObj[8], null, tk));
                result.getLista().add(item);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} ", logParams);
        }
        return result;
    }

    public ElementoPublicitarioCVOList listarEPMercadoCampana(ElementoPublicitarioCVO epcvo) throws ApplicationException {
        Object[] logParams = new Object[3];
        ElementoPublicitarioCVOList result = new ElementoPublicitarioCVOList();
        result.setLista( new ArrayList<ElementoPublicitarioCVO>() );
        result.setTicket(epcvo.getTicket());
        Long tk = result.getTicket();
        ElementoPublicitarioCVO item = null;
        Session session_db=null;
        try {
            String queryStr=QueryFactory.instance().query("elementopublicitario_listar_001", epcvo.getTicket());
            logParams[0] = queryStr;
            //checkSession();
            session_db = session();

            session_db.beginTransaction();
            SQLQuery query = session_db.createSQLQuery(queryStr);
            if(epcvo.getIdCampanaRecoleccion()==null){
                epcvo.setIdCampanaRecoleccion(0);
            }
            if(epcvo.getIdMercado()==null){
                epcvo.setIdMercado(0);
            }
            query.setInteger("idcampanarecoleccion", epcvo.getIdCampanaRecoleccion());
            logParams[1] = epcvo.getIdCampanaRecoleccion();
            query.setInteger("idmercado", epcvo.getIdMercado());
            logParams[2] = epcvo.getIdMercado();
            Object objList = query.list();
            Object[] itemObj = null;

            for (Object obj : (List) objList) {
                itemObj = (Object[]) obj;
                item = new ElementoPublicitarioCVO();
                item.setIdElementoPublicitario(getInteger(itemObj[0], null, tk));
                item.setNombre(getString(itemObj[1], null, tk));
                item.setIdMercado(getInteger(itemObj[2], null, tk));
                item.setDireccion(getString(itemObj[3], null, tk));
                BigDecimal bdLat = getBigDecimal(itemObj[4], null, tk);
                bdLat=bdLat.setScale(5,RoundingMode.HALF_EVEN);
                item.setLatitud(bdLat);
                BigDecimal bdLong = getBigDecimal(itemObj[5], null, tk);
                bdLong=bdLong.setScale(5,RoundingMode.HALF_EVEN);
                item.setLongitud(bdLong);
                item.setEstadoRegistro(getString(itemObj[6], null, tk));
                item.setT(getString(itemObj[7], null, tk));
                item.setOrden(getInteger(itemObj[8], null, tk));
                item.setDepartamento(getString(itemObj[9], null, tk));
                item.setProvincia(getString(itemObj[10], null, tk));
                item.setDistrito(getString(itemObj[11], null, tk));
                item.setTipoEP(getInteger(itemObj[12], null, tk));
                item.setTamanoEP(getInteger(itemObj[13], null, tk));
                item.setIdUsuario(getString(itemObj[14], null, tk));
                item.setFechaCreacion(getDate(itemObj[15], null, tk));
                item.setIdCampanaRecoleccion(getInteger(itemObj[16], null, tk));
                result.getLista().add(item);
            }
            session_db.getTransaction().commit();
        } catch (Exception e) {
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} campana={} mercado={} ", logParams);
        }
        return result;
    }

    public ElementoPublicitarioViewVOList listarEPVerificador(ElementoPublicitarioViewVO clusterPruebaVO) throws ApplicationException {
        Object[] logParams = new Object[2];
        ElementoPublicitarioViewVOList result = new ElementoPublicitarioViewVOList();
        result.setLista( new ArrayList<ElementoPublicitarioViewVO>() );
        result.setTicket(clusterPruebaVO.getTicket());
        Long tk = result.getTicket();
        ElementoPublicitarioViewVO item = null;
        try {
            String queryStr=QueryFactory.instance().query("elementopublicitario_listar_verificador", clusterPruebaVO.getTicket());
            logParams[0] = queryStr;
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            query.setInteger("idverificador", clusterPruebaVO.getIdverificador());
            Object objList = query.list();
            Object[] itemObj = null;

            for (Object obj : (List) objList) {
                itemObj = (Object[]) obj;
                item = new ElementoPublicitarioViewVO();
                item.setCodigoep(getInteger(itemObj[0], null, tk));
                item.setOrden(getInteger(itemObj[1], null, tk));
                item.setNombreEP(getString(itemObj[2], null, tk));
                item.setIdProveedor(getInteger(itemObj[3], null, tk));
                item.setDescripcionProveedor(getString(itemObj[4], null, tk));
                item.setTipoEP(getInteger(itemObj[5], null, tk));
                item.setTamanoEP(getInteger(itemObj[6], null, tk));
                item.setDireccionEP(getString(itemObj[7], null, tk));
                item.setDistritoEP(getString(itemObj[8], null, tk));
                item.setProvinciaEP(getString(itemObj[9], null, tk));
                item.setDepartamentoEP(getString(itemObj[10], null, tk));
                result.getLista().add(item);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} ", logParams);
        }
        return result;
    }
    
    
    

}
